/**
 * 全局 Toast 通知管理器
 * 统一管理 ToastNotification 组件的显示
 */

let toastInstance = null

/**
 * 设置 Toast 组件实例
 * @param {Object} instance - Vue 组件实例
 */
export function setToastInstance(instance) {
  toastInstance = instance
}

/**
 * 显示 Toast 通知
 * @param {Object} options - Toast 配置
 * @param {String} options.title - 标题
 * @param {String} options.message - 消息内容（可选）
 * @param {String} options.type - 类型：success, error, info, warning
 * @param {String} options.icon - 自定义图标（可选）
 * @param {Number} options.duration - 显示时长（毫秒），默认 2500
 */
export function showToast(options = {}) {
  if (!toastInstance) {
    console.warn('Toast 实例未初始化，使用原生 uni.showToast 作为降级方案')
    // 降级到原生 toast
    const title = options.message || options.title || '提示'
    uni.showToast({
      title: title.length > 7 ? title.substring(0, 7) + '...' : title,
      icon: options.type === 'success' ? 'success' : 'none',
      duration: options.duration || 2500
    })
    return
  }

  const {
    title = '提示',
    message = '',
    type = 'info',
    icon = '',
    duration = 2500
  } = options

  // 调用组件方法显示 toast
  if (toastInstance.show) {
    toastInstance.show({
      title,
      message,
      type,
      icon,
      duration
    })
  } else {
    // 如果组件没有 show 方法，直接设置数据
    toastInstance.title = title
    toastInstance.message = message
    toastInstance.type = type
    toastInstance.icon = icon
    toastInstance.duration = duration
    toastInstance.visible = true
  }
}

/**
 * 显示成功提示
 * @param {String} title - 标题
 * @param {String} message - 消息内容（可选）
 * @param {Number} duration - 显示时长，默认 2500ms
 */
export function showSuccess(title, message = '', duration = 2500) {
  showToast({
    title,
    message,
    type: 'success',
    icon: '✨',
    duration
  })
}

/**
 * 显示错误提示
 * @param {String} title - 标题
 * @param {String} message - 消息内容（可选）
 * @param {Number} duration - 显示时长，默认 3000ms
 */
export function showError(title, message = '', duration = 3000) {
  showToast({
    title,
    message,
    type: 'error',
    icon: '❌',
    duration
  })
}

/**
 * 显示信息提示
 * @param {String} title - 标题
 * @param {String} message - 消息内容（可选）
 * @param {Number} duration - 显示时长，默认 2500ms
 */
export function showInfo(title, message = '', duration = 2500) {
  showToast({
    title,
    message,
    type: 'info',
    icon: 'ℹ️',
    duration
  })
}

/**
 * 显示警告提示
 * @param {String} title - 标题
 * @param {String} message - 消息内容（可选）
 * @param {Number} duration - 显示时长，默认 3000ms
 */
export function showWarning(title, message = '', duration = 3000) {
  showToast({
    title,
    message,
    type: 'warning',
    icon: '⚠️',
    duration
  })
}

/**
 * 隐藏 Toast
 */
export function hideToast() {
  if (toastInstance) {
    if (toastInstance.hide) {
      toastInstance.hide()
    } else {
      toastInstance.visible = false
    }
  }
}

export default {
  setToastInstance,
  showToast,
  showSuccess,
  showError,
  showInfo,
  showWarning,
  hideToast
}

